home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / util / Properties.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  6.4 KB  |  464 lines

  1. package java.util;
  2.  
  3. import java.io.BufferedWriter;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.OutputStream;
  7. import java.io.OutputStreamWriter;
  8. import java.io.PrintStream;
  9. import java.io.PrintWriter;
  10. import java.io.Reader;
  11. import java.io.Writer;
  12.  
  13. public class Properties extends Hashtable<Object, Object> {
  14.    private static final long serialVersionUID = 4112578634029874840L;
  15.    protected Properties defaults;
  16.    private static final char[] hexDigit = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
  17.  
  18.    public Properties() {
  19.       this((Properties)null);
  20.    }
  21.  
  22.    public Properties(Properties var1) {
  23.       this.defaults = var1;
  24.    }
  25.  
  26.    public synchronized Object setProperty(String var1, String var2) {
  27.       return this.put(var1, var2);
  28.    }
  29.  
  30.    public synchronized void load(Reader var1) throws IOException {
  31.       this.load0(new LineReader(this, var1));
  32.    }
  33.  
  34.    public synchronized void load(InputStream var1) throws IOException {
  35.       this.load0(new LineReader(this, var1));
  36.    }
  37.  
  38.    private void load0(LineReader var1) throws IOException {
  39.       char[] var2 = new char[1024];
  40.  
  41.       int var3;
  42.       while((var3 = var1.readLine()) >= 0) {
  43.          char var6 = '\u0000';
  44.          int var4 = 0;
  45.          int var5 = var3;
  46.          boolean var7 = false;
  47.  
  48.          for(boolean var8 = false; var4 < var3; ++var4) {
  49.             var6 = var1.lineBuf[var4];
  50.             if ((var6 == '=' || var6 == ':') && !var8) {
  51.                var5 = var4 + 1;
  52.                var7 = true;
  53.                break;
  54.             }
  55.  
  56.             if ((var6 == ' ' || var6 == '\t' || var6 == '\f') && !var8) {
  57.                var5 = var4 + 1;
  58.                break;
  59.             }
  60.  
  61.             if (var6 == '\\') {
  62.                var8 = !var8;
  63.             } else {
  64.                var8 = false;
  65.             }
  66.          }
  67.  
  68.          for(; var5 < var3; ++var5) {
  69.             var6 = var1.lineBuf[var5];
  70.             if (var6 != ' ' && var6 != '\t' && var6 != '\f') {
  71.                if (var7 || var6 != '=' && var6 != ':') {
  72.                   break;
  73.                }
  74.  
  75.                var7 = true;
  76.             }
  77.          }
  78.  
  79.          String var9 = this.loadConvert(var1.lineBuf, 0, var4, var2);
  80.          String var10 = this.loadConvert(var1.lineBuf, var5, var3 - var5, var2);
  81.          this.put(var9, var10);
  82.       }
  83.  
  84.    }
  85.  
  86.    private String loadConvert(char[] var1, int var2, int var3, char[] var4) {
  87.       if (var4.length < var3) {
  88.          int var5 = var3 * 2;
  89.          if (var5 < 0) {
  90.             var5 = Integer.MAX_VALUE;
  91.          }
  92.  
  93.          var4 = new char[var5];
  94.       }
  95.  
  96.       char[] var6 = var4;
  97.       int var7 = 0;
  98.       int var8 = var2 + var3;
  99.  
  100.       while(var2 < var8) {
  101.          char var11 = var1[var2++];
  102.          if (var11 == '\\') {
  103.             var11 = var1[var2++];
  104.             if (var11 == 'u') {
  105.                int var9 = 0;
  106.  
  107.                for(int var10 = 0; var10 < 4; ++var10) {
  108.                   var11 = var1[var2++];
  109.                   switch (var11) {
  110.                      case '0':
  111.                      case '1':
  112.                      case '2':
  113.                      case '3':
  114.                      case '4':
  115.                      case '5':
  116.                      case '6':
  117.                      case '7':
  118.                      case '8':
  119.                      case '9':
  120.                         var9 = (var9 << 4) + var11 - 48;
  121.                         break;
  122.                      case ':':
  123.                      case ';':
  124.                      case '<':
  125.                      case '=':
  126.                      case '>':
  127.                      case '?':
  128.                      case '@':
  129.                      case 'G':
  130.                      case 'H':
  131.                      case 'I':
  132.                      case 'J':
  133.                      case 'K':
  134.                      case 'L':
  135.                      case 'M':
  136.                      case 'N':
  137.                      case 'O':
  138.                      case 'P':
  139.                      case 'Q':
  140.                      case 'R':
  141.                      case 'S':
  142.                      case 'T':
  143.                      case 'U':
  144.                      case 'V':
  145.                      case 'W':
  146.                      case 'X':
  147.                      case 'Y':
  148.                      case 'Z':
  149.                      case '[':
  150.                      case '\\':
  151.                      case ']':
  152.                      case '^':
  153.                      case '_':
  154.                      case '`':
  155.                      default:
  156.                         throw new IllegalArgumentException("Malformed \\uxxxx encoding.");
  157.                      case 'A':
  158.                      case 'B':
  159.                      case 'C':
  160.                      case 'D':
  161.                      case 'E':
  162.                      case 'F':
  163.                         var9 = (var9 << 4) + 10 + var11 - 65;
  164.                         break;
  165.                      case 'a':
  166.                      case 'b':
  167.                      case 'c':
  168.                      case 'd':
  169.                      case 'e':
  170.                      case 'f':
  171.                         var9 = (var9 << 4) + 10 + var11 - 97;
  172.                   }
  173.                }
  174.  
  175.                var6[var7++] = (char)var9;
  176.             } else {
  177.                if (var11 == 't') {
  178.                   var11 = '\t';
  179.                } else if (var11 == 'r') {
  180.                   var11 = '\r';
  181.                } else if (var11 == 'n') {
  182.                   var11 = '\n';
  183.                } else if (var11 == 'f') {
  184.                   var11 = '\f';
  185.                }
  186.  
  187.                var6[var7++] = var11;
  188.             }
  189.          } else {
  190.             var6[var7++] = var11;
  191.          }
  192.       }
  193.  
  194.       return new String(var6, 0, var7);
  195.    }
  196.  
  197.    private String saveConvert(String var1, boolean var2, boolean var3) {
  198.       int var4 = var1.length();
  199.       int var5 = var4 * 2;
  200.       if (var5 < 0) {
  201.          var5 = Integer.MAX_VALUE;
  202.       }
  203.  
  204.       StringBuffer var6 = new StringBuffer(var5);
  205.  
  206.       for(int var7 = 0; var7 < var4; ++var7) {
  207.          char var8 = var1.charAt(var7);
  208.          if (var8 > '=' && var8 < 127) {
  209.             if (var8 == '\\') {
  210.                var6.append('\\');
  211.                var6.append('\\');
  212.             } else {
  213.                var6.append(var8);
  214.             }
  215.          } else {
  216.             switch (var8) {
  217.                case '\t':
  218.                   var6.append('\\');
  219.                   var6.append('t');
  220.                   break;
  221.                case '\n':
  222.                   var6.append('\\');
  223.                   var6.append('n');
  224.                   break;
  225.                case '\f':
  226.                   var6.append('\\');
  227.                   var6.append('f');
  228.                   break;
  229.                case '\r':
  230.                   var6.append('\\');
  231.                   var6.append('r');
  232.                   break;
  233.                case ' ':
  234.                   if (var7 == 0 || var2) {
  235.                      var6.append('\\');
  236.                   }
  237.  
  238.                   var6.append(' ');
  239.                   break;
  240.                case '!':
  241.                case '#':
  242.                case ':':
  243.                case '=':
  244.                   var6.append('\\');
  245.                   var6.append(var8);
  246.                   break;
  247.                default:
  248.                   if ((var8 < ' ' || var8 > '~') & var3) {
  249.                      var6.append('\\');
  250.                      var6.append('u');
  251.                      var6.append(toHex(var8 >> 12 & 15));
  252.                      var6.append(toHex(var8 >> 8 & 15));
  253.                      var6.append(toHex(var8 >> 4 & 15));
  254.                      var6.append(toHex(var8 & 15));
  255.                   } else {
  256.                      var6.append(var8);
  257.                   }
  258.             }
  259.          }
  260.       }
  261.  
  262.       return var6.toString();
  263.    }
  264.  
  265.    private static void writeComments(BufferedWriter var0, String var1) throws IOException {
  266.       var0.write("#");
  267.       int var2 = var1.length();
  268.       int var3 = 0;
  269.       int var4 = 0;
  270.  
  271.       for(char[] var5 = new char[]{'\\', 'u', '\u0000', '\u0000', '\u0000', '\u0000'}; var3 < var2; ++var3) {
  272.          char var6 = var1.charAt(var3);
  273.          if (var6 > 255 || var6 == '\n' || var6 == '\r') {
  274.             if (var4 != var3) {
  275.                var0.write(var1.substring(var4, var3));
  276.             }
  277.  
  278.             if (var6 > 255) {
  279.                var5[2] = toHex(var6 >> 12 & 15);
  280.                var5[3] = toHex(var6 >> 8 & 15);
  281.                var5[4] = toHex(var6 >> 4 & 15);
  282.                var5[5] = toHex(var6 & 15);
  283.                var0.write(new String(var5));
  284.             } else {
  285.                var0.newLine();
  286.                if (var6 == '\r' && var3 != var2 - 1 && var1.charAt(var3 + 1) == '\n') {
  287.                   ++var3;
  288.                }
  289.  
  290.                if (var3 == var2 - 1 || var1.charAt(var3 + 1) != '#' && var1.charAt(var3 + 1) != '!') {
  291.                   var0.write("#");
  292.                }
  293.             }
  294.  
  295.             var4 = var3 + 1;
  296.          }
  297.       }
  298.  
  299.       if (var4 != var3) {
  300.          var0.write(var1.substring(var4, var3));
  301.       }
  302.  
  303.       var0.newLine();
  304.    }
  305.  
  306.    /** @deprecated */
  307.    @Deprecated
  308.    public synchronized void save(OutputStream var1, String var2) {
  309.       try {
  310.          this.store(var1, var2);
  311.       } catch (IOException var4) {
  312.       }
  313.  
  314.    }
  315.  
  316.    public void store(Writer var1, String var2) throws IOException {
  317.       this.store0(var1 instanceof BufferedWriter ? (BufferedWriter)var1 : new BufferedWriter(var1), var2, false);
  318.    }
  319.  
  320.    public void store(OutputStream var1, String var2) throws IOException {
  321.       this.store0(new BufferedWriter(new OutputStreamWriter(var1, "8859_1")), var2, true);
  322.    }
  323.  
  324.    private void store0(BufferedWriter var1, String var2, boolean var3) throws IOException {
  325.       if (var2 != null) {
  326.          writeComments(var1, var2);
  327.       }
  328.  
  329.       var1.write("#" + (new Date()).toString());
  330.       var1.newLine();
  331.       synchronized(this) {
  332.          Enumeration var5 = this.keys();
  333.  
  334.          while(var5.hasMoreElements()) {
  335.             String var6 = (String)var5.nextElement();
  336.             String var7 = (String)this.get(var6);
  337.             var6 = this.saveConvert(var6, true, var3);
  338.             var7 = this.saveConvert(var7, false, var3);
  339.             var1.write(var6 + "=" + var7);
  340.             var1.newLine();
  341.          }
  342.       }
  343.  
  344.       var1.flush();
  345.    }
  346.  
  347.    public synchronized void loadFromXML(InputStream var1) throws IOException, InvalidPropertiesFormatException {
  348.       if (var1 == null) {
  349.          throw new NullPointerException();
  350.       } else {
  351.          XMLUtils.load(this, var1);
  352.          var1.close();
  353.       }
  354.    }
  355.  
  356.    public synchronized void storeToXML(OutputStream var1, String var2) throws IOException {
  357.       if (var1 == null) {
  358.          throw new NullPointerException();
  359.       } else {
  360.          this.storeToXML(var1, var2, "UTF-8");
  361.       }
  362.    }
  363.  
  364.    public synchronized void storeToXML(OutputStream var1, String var2, String var3) throws IOException {
  365.       if (var1 == null) {
  366.          throw new NullPointerException();
  367.       } else {
  368.          XMLUtils.save(this, var1, var2, var3);
  369.       }
  370.    }
  371.  
  372.    public String getProperty(String var1) {
  373.       Object var2 = super.get(var1);
  374.       String var3 = var2 instanceof String ? (String)var2 : null;
  375.       return var3 == null && this.defaults != null ? this.defaults.getProperty(var1) : var3;
  376.    }
  377.  
  378.    public String getProperty(String var1, String var2) {
  379.       String var3 = this.getProperty(var1);
  380.       return var3 == null ? var2 : var3;
  381.    }
  382.  
  383.    public Enumeration<?> propertyNames() {
  384.       Hashtable var1 = new Hashtable();
  385.       this.enumerate(var1);
  386.       return var1.keys();
  387.    }
  388.  
  389.    public Set<String> stringPropertyNames() {
  390.       Hashtable var1 = new Hashtable();
  391.       this.enumerateStringProperties(var1);
  392.       return var1.keySet();
  393.    }
  394.  
  395.    public void list(PrintStream var1) {
  396.       var1.println("-- listing properties --");
  397.       Hashtable var2 = new Hashtable();
  398.       this.enumerate(var2);
  399.  
  400.       String var4;
  401.       String var5;
  402.       for(Enumeration var3 = var2.keys(); var3.hasMoreElements(); var1.println(var4 + "=" + var5)) {
  403.          var4 = (String)var3.nextElement();
  404.          var5 = (String)var2.get(var4);
  405.          if (var5.length() > 40) {
  406.             var5 = var5.substring(0, 37) + "...";
  407.          }
  408.       }
  409.  
  410.    }
  411.  
  412.    public void list(PrintWriter var1) {
  413.       var1.println("-- listing properties --");
  414.       Hashtable var2 = new Hashtable();
  415.       this.enumerate(var2);
  416.  
  417.       String var4;
  418.       String var5;
  419.       for(Enumeration var3 = var2.keys(); var3.hasMoreElements(); var1.println(var4 + "=" + var5)) {
  420.          var4 = (String)var3.nextElement();
  421.          var5 = (String)var2.get(var4);
  422.          if (var5.length() > 40) {
  423.             var5 = var5.substring(0, 37) + "...";
  424.          }
  425.       }
  426.  
  427.    }
  428.  
  429.    private synchronized void enumerate(Hashtable var1) {
  430.       if (this.defaults != null) {
  431.          this.defaults.enumerate(var1);
  432.       }
  433.  
  434.       Enumeration var2 = this.keys();
  435.  
  436.       while(var2.hasMoreElements()) {
  437.          String var3 = (String)var2.nextElement();
  438.          var1.put(var3, this.get(var3));
  439.       }
  440.  
  441.    }
  442.  
  443.    private synchronized void enumerateStringProperties(Hashtable<String, String> var1) {
  444.       if (this.defaults != null) {
  445.          this.defaults.enumerateStringProperties(var1);
  446.       }
  447.  
  448.       Enumeration var2 = this.keys();
  449.  
  450.       while(var2.hasMoreElements()) {
  451.          Object var3 = var2.nextElement();
  452.          Object var4 = this.get(var3);
  453.          if (var3 instanceof String && var4 instanceof String) {
  454.             var1.put((String)var3, (String)var4);
  455.          }
  456.       }
  457.  
  458.    }
  459.  
  460.    private static char toHex(int var0) {
  461.       return hexDigit[var0 & 15];
  462.    }
  463. }
  464.